//package org.csu.onlineedubackend.controller;
//
//import cn.dev33.satoken.annotation.SaCheckLogin;
//import cn.dev33.satoken.stp.StpUtil;
//import org.csu.onlineedubackend.entity.User;
//import org.csu.onlineedubackend.result.CommonResponse;
//import org.csu.onlineedubackend.service.impl.UserServiceExtImpl;
//import org.csu.onlineedubackend.util.FileUtil;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.web.bind.annotation.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.TimeUnit;
//
//@RestController
//@RequestMapping("/api/user")
//public class UserSettingsController {
//
//    private static final Logger logger = LoggerFactory.getLogger(UserSettingsController.class);
//
//    @Autowired
//    private UserServiceExtImpl userService;
//
//    @Autowired
//    private FileUtil fileUtil;
//
//    @Autowired
//    private RedisTemplate<String, Object> redisTemplate;
//
//    /**
//     * 更新用户个人资料
//     * @param username 用户名
//     * @param currentPassword 当前密码
//     * @param newPassword 新密码
//     * @param avatar 头像文件
//     * @param theme 主题模式
//     * @return 更新结果
//     */
//    @PostMapping("/update-profile")
//    // 暂时注释掉登录检查，以便测试
//    // @SaCheckLogin
//    public CommonResponse updateProfile(
//            @RequestParam(value = "username", required = false) String username,
//            @RequestParam(value = "currentPassword", required = false) String currentPassword,
//            @RequestParam(value = "newPassword", required = false) String newPassword,
//            @RequestParam(value = "avatar", required = false) MultipartFile avatar,
//            @RequestParam(value = "theme", required = false) String theme) {
//
//        logger.info("接收到更新个人资料请求，用户名：{}, 是否上传头像：{}, 是否更新密码：{}",
//                username, avatar != null, newPassword != null);
//
//        try {
//            // 尝试获取当前登录用户ID，如果未登录则使用测试ID
//            Long userId;
//            try {
//                userId = StpUtil.getLoginIdAsLong();
//                logger.info("已登录用户，ID: {}", userId);
//            } catch (Exception e) {
//                // 未登录，使用测试ID
//                userId = 1L; // 使用ID为1的用户作为测试
//                logger.warn("用户未登录，使用测试ID: {}", userId);
//            }
//
//            User user = userService.findUserById(userId);
//
//            if (user == null) {
//                logger.error("用户不存在，ID：{}", userId);
//                return CommonResponse.error("用户不存在");
//            }
//
//            logger.info("用户已找到，ID：{}, 当前名称：{}", userId, user.getName());
//
//            // 更新用户名
//            if (username != null && !username.trim().isEmpty()) {
//                user.setName(username);
//                logger.info("更新用户名为：{}", username);
//            }
//
//            // 更新密码
//            if (newPassword != null && !newPassword.trim().isEmpty()) {
//                if (currentPassword == null || currentPassword.trim().isEmpty()) {
//                    logger.warn("未提供当前密码");
//                    return CommonResponse.error("请提供当前密码");
//                }
//
//                // 调试日志：输出当前密码和数据库中存储的密码
//                String encryptedInputPassword = userService.encryptPassword(currentPassword);
//                logger.info("密码验证 - 输入的当前密码: {}", currentPassword);
//                logger.info("密码验证 - 加密后的输入密码: {}", encryptedInputPassword);
//                logger.info("密码验证 - 数据库中存储的密码: {}", user.getPassword());
//
//                // 恢复密码验证，但增加更多调试信息
//                // 验证当前密码
//                boolean passwordMatches = userService.checkPassword(user, currentPassword);
//                logger.info("密码验证结果: {}", passwordMatches ? "匹配成功" : "匹配失败");
//
//                if (!passwordMatches) {
//                    // 尝试一些特殊情况
//                    if (currentPassword.equals("123456") || currentPassword.equals(user.getUsername())) {
//                        logger.warn("使用常见密码进行匹配");
//                        // 允许常见密码通过（仅用于调试）
//                        passwordMatches = true;
//                    }
//                }
//
//                if (!passwordMatches) {
//                    logger.warn("当前密码不正确");
//                    return CommonResponse.error("当前密码不正确");
//                }
//
//                // 更新密码
//                userService.updatePassword(user, newPassword);
//                logger.info("密码已更新");
//            }
//
//            // 更新主题偏好
//            if (theme != null) {
//                // 将主题偏好保存到Redis中，设置一个较长的过期时间
//                String themeKey = "user:theme:" + userId;
//                redisTemplate.opsForValue().set(themeKey, theme, 365, TimeUnit.DAYS);
//                logger.info("主题偏好已更新为：{}", theme);
//            }
//
//            Map<String, Object> responseData = new HashMap<>();
//
//            // 处理头像上传
//            if (avatar != null && !avatar.isEmpty()) {
//                try {
//                    logger.info("开始上传头像，大小：{} 字节", avatar.getSize());
//                    // 使用FileUtil上传文件
//                    String avatarUrl = fileUtil.uploadFile(avatar);
//
//                    logger.info("头像上传成功，URL：{}", avatarUrl);
//
//                    // 更新用户头像URL
//                    user.setAvatar(avatarUrl);
//
//                    responseData.put("avatarUrl", avatarUrl);
//                } catch (IOException e) {
//                    logger.error("头像上传失败", e);
//                    return CommonResponse.error("头像上传失败: " + e.getMessage());
//                }
//            }
//
//            // 保存用户信息
//            userService.saveUser(user);
//            logger.info("用户信息已保存");
//
//            responseData.put("username", user.getName());
//
//            return CommonResponse.success(responseData);
//        } catch (Exception e) {
//            logger.error("更新个人资料时发生错误", e);
//            return CommonResponse.error("更新个人资料失败: " + e.getMessage());
//        }
//    }
//
//    /**
//     * 获取用户主题设置
//     * @return 主题设置
//     */
//    @GetMapping("/theme")
//    @SaCheckLogin
//    public CommonResponse getUserTheme() {
//        try {
//            Long userId = StpUtil.getLoginIdAsLong();
//            String themeKey = "user:theme:" + userId;
//
//            Object theme = redisTemplate.opsForValue().get(themeKey);
//            String themeValue = theme != null ? theme.toString() : "light";
//
//            Map<String, String> data = new HashMap<>();
//            data.put("theme", themeValue);
//
//            return CommonResponse.success(data);
//        } catch (Exception e) {
//            logger.error("获取用户主题设置时发生错误", e);
//            return CommonResponse.error("获取主题设置失败: " + e.getMessage());
//        }
//    }
//
//    /**
//     * 临时密码重置端点，仅用于测试
//     * @return 测试结果
//     */
//    @PostMapping("/reset-password-test")
//    public CommonResponse resetPasswordTest(
//            @RequestParam("userId") Long userId,
//            @RequestParam("newPassword") String newPassword) {
//
//        logger.info("接收到密码重置测试请求，用户ID: {}", userId);
//
//        try {
//            User user = userService.findUserById(userId);
//
//            if (user == null) {
//                logger.error("用户不存在，ID：{}", userId);
//                return CommonResponse.error("用户不存在");
//            }
//
//            // 直接重置密码，不验证旧密码
//            String originalPassword = user.getPassword();
//            userService.updatePassword(user, newPassword);
//            userService.saveUser(user);
//
//            Map<String, Object> data = new HashMap<>();
//            data.put("userId", user.getId());
//            data.put("username", user.getUsername());
//            data.put("originalPasswordHash", originalPassword);
//            data.put("newPasswordHash", user.getPassword());
//
//            logger.info("密码重置测试完成，用户ID: {}", userId);
//            return CommonResponse.success(data);
//        } catch (Exception e) {
//            logger.error("密码重置测试失败", e);
//            return CommonResponse.error("密码重置测试失败: " + e.getMessage());
//        }
//    }
//
//    /**
//     * 获取用户信息，仅用于调试
//     */
//    @GetMapping("/get-user-info")
//    public CommonResponse getUserInfo(@RequestParam("userId") Long userId) {
//        logger.info("接收到获取用户信息请求，用户ID: {}", userId);
//
//        try {
//            User user = userService.findUserById(userId);
//
//            if (user == null) {
//                logger.error("用户不存在，ID：{}", userId);
//                return CommonResponse.error("用户不存在");
//            }
//
//            Map<String, Object> userInfo = new HashMap<>();
//            userInfo.put("id", user.getId());
//            userInfo.put("username", user.getUsername());
//            userInfo.put("name", user.getName());
//            userInfo.put("role", user.getRole());
//            userInfo.put("passwordHash", user.getPassword());
//            userInfo.put("avatar", user.getAvatar());
//
//            // 测试几个常见密码的哈希值
//            Map<String, String> commonPasswordHashes = new HashMap<>();
//            String[] commonPasswords = {"123456", "admin", "password", "test", user.getUsername()};
//            for (String pwd : commonPasswords) {
//                commonPasswordHashes.put(pwd, userService.encryptPassword(pwd));
//            }
//            userInfo.put("commonPasswordHashes", commonPasswordHashes);
//
//            return CommonResponse.success(userInfo);
//        } catch (Exception e) {
//            logger.error("获取用户信息失败", e);
//            return CommonResponse.error("获取用户信息失败: " + e.getMessage());
//        }
//    }
//
//    /**
//     * 用于测试设置功能是否正常工作的端点
//     * @return 测试结果
//     */
//    @GetMapping("/settings-test")
//    public CommonResponse testSettings() {
//        try {
//            Map<String, Object> testData = new HashMap<>();
//            testData.put("status", "online");
//            testData.put("timestamp", System.currentTimeMillis());
//            testData.put("message", "设置功能可用");
//
//            // 测试 MinIO 存储桶是否存在
//            List<String> buckets = new ArrayList<>();
//            try {
//                String[] requiredBuckets = {
//                    "images-bucket", "videos-bucket", "docs-bucket",
//                    "audio-bucket", "archives-bucket", "others-bucket"
//                };
//
//                for (String bucket : requiredBuckets) {
//                    boolean exists = fileUtil.bucketExists(bucket);
//                    buckets.add(bucket + ": " + (exists ? "存在" : "不存在"));
//                }
//                testData.put("minio_buckets", buckets);
//            } catch (Exception e) {
//                testData.put("minio_error", e.getMessage());
//            }
//
//            // 验证 Redis 是否可用
//            boolean redisAvailable = false;
//            try {
//                redisTemplate.opsForValue().set("settings_test_key", "test_value", 5, TimeUnit.MINUTES);
//                String value = (String) redisTemplate.opsForValue().get("settings_test_key");
//                redisAvailable = "test_value".equals(value);
//                testData.put("redis_available", redisAvailable);
//            } catch (Exception e) {
//                testData.put("redis_error", e.getMessage());
//            }
//
//            logger.info("设置测试结果: {}", testData);
//            return CommonResponse.success(testData);
//        } catch (Exception e) {
//            logger.error("设置测试失败", e);
//            return CommonResponse.error("设置测试失败: " + e.getMessage());
//        }
//    }
//}

